home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 July
/
EnigmA AMIGA RUN 09 (1996)(G.R. Edizioni)(IT)[!][issue 1996-07 & 08][EARSAN CD VIII].iso
/
earcd
/
util3
/
grabkick.lha
/
GrabKick.a
< prev
next >
Wrap
Text File
|
1996-06-11
|
6KB
|
209 lines
;**** GrabKick.a ******************************************
NOLIST
INCDIR AINCLUDE:
INCLUDE dos/dosextens.i
INCLUDE lvo.i
INCLUDE dos/dos.i
INCLUDE exec/execbase.i
INCLUDE workbench/startup.i
INCLUDE workbench/workbench.i
INCLUDE libraries/asl.i
LIST
; Programmheader
;
; Name: GrabKick
; Author: SDI
; Distribution: PD
; Description: read Kickstart out of ROM and write it to file
; Compileropts: -
; Linkeropts: -
; CLI-Parameter: FILENAME
;
; vers date length
; 1.1 23.12.92 10612 : ANSI-C-Version made by Ralf Gruner
;
; I used name and idea of this program, but not the ANSI-C code,
; because Amiga-ROM functions need no program space: 10612 --> 880 byte
; My program makes no output to user! It can fail at some positions,
; but these fails are so seldom that error messages aren't neccessary!
; The only needed error message (disk full) is made by system function.
; 1.2 07.08.95 880 : new calculation for Revisionnummer works around
; calculation-error of MaxonC++
; 1.3 03.12.95 244 : made new with Maxon Assembler
; 1.4 04.12.95 236 : made shorter
; 1.5 10.12.95 228 : made shorter
; 1.6 19.12.95 300 : now also working from WorkBench
; 1.7 05.01.96 332 : included CLI parameter FILENAME, removed some bugs
; 1.8 10.02.96 508 : Asl-Requester on Workbench-start, new Icon
; 1.9 11.02.96 488 : made shorter, commented text
; 1.10 12.02.96 484 : made shorter
; 1.11 14.02.96 476 : CMPA.L #0,Ax replaced by MOVE.L Ax,D0
; 1.12 17.02.96 476 : BUG: Open_Mode is .L and not .W !
; 1.13 08.03.96 472 : a little bit shorter, tricky LibName method,
; translated source to english
; 1.14 11.04.96 472 : overworked the source code, no new binary file
; 1.15 11.06.96 496 : removed a .L / .W error in name-creation, removed
; libname trick, added version-string to ASL-Req. title
;**** Programm ********************************************
SECTION "GrabKick",CODE
SUBQ.W #1,D0
CLR.B (A0,D0.W) ;make C-string, last char is 0
MOVE.L A0,D5 ;D5 - CLI parameter name
TST.W D0 ;if only one char, no parameter is given
BNE.B .start
MOVEQ #0,D5 ;D5 - clear (no name given)
.start MOVEQ #0,D7 ;D7 - clear (later StartupM)
MOVEA.L 4.W,A6
MOVEA.L ThisTask(A6),A4
TST.L pr_CLI(A4) ;are we on WorkBench ?
BNE.B .CLI
LEA pr_MsgPort(A4),A0
JSR _LVOWaitPort(A6) ;wait for StartUp message
LEA pr_MsgPort(A4),A0
JSR _LVOGetMsg(A6) ;get Message into D7
MOVE.L D0,D7 ;D7 - WBStartUp message
.CLI LEA KICKEND(PC),A2 ;A2 - KickStr-End
MOVEQ #33,D0
LEA DOSNAME(PC),A1
JSR _LVOOpenLibrary(A6) ;open dos.library
TST.L D0 ;fatal Error : librarybase = 0?
BEQ.B .goend ;instead of BEQ.W ENDE (-2 Byte)
MOVEA.L D0,A5 ;A5 - DosBase
TST.L D7
BEQ.B .NoWB
MOVEA.L D7,A0
MOVEA.L sm_ArgList(A0),A0 ;on WB-start get PROGDIR:
MOVE.L A0,D0 ;instead of CMPA.L #0,A0 (-4 Byte)
.goend BEQ.W ENDE
MOVE.L (A0),D1 ;set PROGDIR as current
MOVEA.L A5,A6
JSR _LVOCurrentDir(A6)
.NoWB LEA $01000000,A3 ;Kick-ROM End is every time same!!!
MOVE.L -20(A3),D3 ;D3 - RomSize
SUBA.L D3,A3 ;A3 - Romstart
MOVEQ.L #0,D4
MOVE.W 12(A3),D4 ;D4 - Romvers
MULU #1000,D4
ADD.W 14(A3),D4 ;D4 - Fullversion
.LOOP ;calculate kick..... name
MOVE.L D4,D2
DIVU #10,D2 ;divide with ten
MOVEQ #0,D4
MOVE.W D2,D4 ;store in D4
SWAP D2
ADD.B D2,-(A2) ;remainder into namefile
TST.W D4
BNE.B .LOOP
;end of loop ;D4 - not used
MOVEA.L D5,A2 ;A2 - CLI name or
TST.L D5
BNE.B .GoOn
LEA KICKSTR(PC),A2 ;A2 - kick.....
.GoOn MOVEQ #0,D6 ;D6 - clear (later AslBase)
MOVEQ #0,D5 ;D5 - clear (later Lock)
TST.L D7 ;if not WB then overgo asl-requester
BEQ.B Open
MOVEA.L 4.W,A6
**1111**
* LEA DOSNAME(PC),A1 ;ugly trick : overwrite dos. with asl.
* MOVE.L #'asl.',(A1) ;saves some bytes!
LEA ASLNAME(PC),A1
**1111**
MOVEQ #37,D0
JSR _LVOOpenLibrary(A6) ;open asl.library
MOVE.L D0,D6 ;D6 - AslBase
BEQ.B Open ;failed ?, then like CLI
MOVEA.L D6,A6
MOVEQ #ASL_FileRequest,D0
LEA TAGITEM(PC),A0
JSR _LVOAllocAslRequest(A6) ;create Request-struct
MOVEA.L D0,A4 ;A4 - FileRequester
TST.L D0
BEQ.B Open ;failed ?, then like CLI
MOVEA.L A4,A0
LEA TAGITEM(PC),A1
JSR _LVOAslRequest(A6) ;call requester
TST.L D0
BEQ.B CLEANUP ;failed?, end!!!, it's user-abort
MOVE.L fr_Drawer(A4),D1
MOVEQ #SHARED_LOCK,D2 ;share the directory lock
MOVEA.L A5,A6
JSR _LVOLock(A6) ;get lock on directory
MOVE.L D0,D5 ;D5 - Lock
BEQ.B CLEANUP ;failed?, end!!!, else it makes shit
MOVE.L D5,D1
JSR _LVOCurrentDir(A6) ;make selected directory current
MOVEA.L fr_File(A4),A2 ;A2 - asl name
Open MOVE.L A2,D1 ;name parameter
MOVE.L #MODE_NEWFILE,D2 ;mode parameter
MOVEA.L A5,A6
JSR _LVOOpen(A6)
MOVE.L D0,D4 ;D4 - FileHandle
BEQ.B CLEANUP
;quantity parameter D3 has already it's value
MOVE.L D4,D1 ;filehandle parameter
MOVE.L A3,D2 ;buffer parameter
JSR _LVOWrite(A6)
MOVE.L D0,D2 ;D2 - returnstate of Write
MOVE.L D4,D1 ;filehandle parameter
JSR _LVOClose(A6)
CMP.L D3,D2 ;D2 != D3, then delete File
BEQ.B CLEANUP
MOVE.L A2,D1
JSR _LVODeleteFile(A6)
CLEANUP
MOVE.L D5,D1
BEQ.B .next
JSR _LVOUnLock(A6) ;free lock
.next TST.L D6
BEQ.B .clsdos
MOVE.L A4,D0 ;instead oft CMPA.L #0,A4 (-4 Byte)
BEQ.B .clsasl
MOVEA.L A4,A0
MOVEA.L D6,A6
JSR _LVOFreeAslRequest(A6) ;close filerequester
.clsasl MOVEA.L 4.W,A6
MOVEA.L D6,A1
JSR _LVOCloseLibrary(A6) ;close asl.library
.clsdos MOVEA.L 4.W,A6
MOVEA.L A5,A1
JSR _LVOCloseLibrary(A6) ;close dos.library
ENDE
TST.L D7 ;come we from Workbench ?
BEQ.B .exit ;no - was CLI
JSR _LVOForbid(A6) ;make ReplyMsg save
MOVEA.L D7,A1 ;get Message into A1
JSR _LVOReplyMsg(A6) ;end program
MOVEQ #0,D0
.exit RTS
DOSNAME DC.B 'dos.library',0
**1111**
ASLNAME DC.B 'asl.library',0
**1111**
KICKSTR DC.B 'kick00000'
KICKEND DC.B 0
TAGITEM DC.L ASLFR_InitialFile,KICKSTR
**2222**
DC.L ASLFR_TitleText,VERSION
**2222**
DC.L 0
DC.B '$VER: '
VERSION DC.B 'GrabKick 1.15 (11.06.96) (PD) by SDI'
**2222**
DC.B 0
**2222**
; 0 byte of the string is not needed, because in the file the header
; does same as a 0 byte and in running state the string isn't used
* in the lines between **....** remove stars and set stars to the lines
* without, for:
* **1111** : remove the ugly asl.library name trick
* **2222** : set ASL titletext to programname (needs 12 bytes more)
END